package com.accesoDatos;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

/**
 * @author fberoy. En cada clase de base de Datos es necesario cambiar el nombre
 *         de la BD y la version de la misma. Ademas de sobrescribir los metodos
 *         onCreateOverride y onUpgradeOverride del helper.
 * 
 */
public abstract class BaseDatos implements generacionBD {

	// static int version = 1;
	// private static String nombreBaseDatos = "mantenimientoVehiculo";
	// static final String sqlCreate = "CREATE TABLE historicorepostar "
	// + " (id_historicorepostar INTEGER PRIMARY KEY AUTOINCREMENT"
	// + ", fecha TEXT, kilometros INTEGER, litros REAL, preciolitro REAL)";

	public static enum ModosBaseDatos {
		SoloLecutra, Escritura
	};

	private SQLiteDatabase database;
	private ConstructorBDSQLiteHelper dbLiteOpenHelper;

	public BaseDatos(Context context, String name, int version,
			CursorFactory factory) {
		dbLiteOpenHelper = new ConstructorBDSQLiteHelper(context, name,
				factory, version);
	}

	public SQLiteDatabase getDatabase() {
		return database;
	}

	public void open(ModosBaseDatos modo) throws SQLException {
		if (modo == ModosBaseDatos.Escritura) {
			database = dbLiteOpenHelper.getWritableDatabase();
		} else if (modo == ModosBaseDatos.SoloLecutra) {
			database = dbLiteOpenHelper.getReadableDatabase();
		}
	}

	public void close() {
		dbLiteOpenHelper.close();
	}

	/**
	 * @author fberoy. Constructor genericos de la Base de datos. Es necesario
	 *         implementar los metodos onCreate y onUpgrade para cada base de
	 *         datos diferente
	 * 
	 */
	public class ConstructorBDSQLiteHelper extends SQLiteOpenHelper {

		/**
		 * @param context
		 * @param name
		 * @param factory
		 * @param version
		 */
		public ConstructorBDSQLiteHelper(Context context, String name,
				CursorFactory factory, int version) {
			super(context, name, factory, version);
			/* TODO Apendice de constructor generado automaticamente */
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Ap�ndice de m�todo generado autom�ticamente
			onCreateOverride(db);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int versionAnterior,
				int versionNueva) {
			onUpgradeOverride(db, versionAnterior, versionNueva);
		}

	}
}

interface generacionBD {
	void onCreateOverride(SQLiteDatabase db);

	void onUpgradeOverride(SQLiteDatabase db, int versionAnterior,
			int versionNueva);
}
//private void onCreateOverride(SQLiteDatabase db){
	// db.execSQL(sqlCreate);
	// }
	// private void onUpgradeOverride(SQLiteDatabase db, int versionAnterior,
	// int versionNueva){
	// TODO Ap�ndice de m�todo generado autom�ticamente
	// NOTA: Por simplicidad del ejemplo aqu� utilizamos directamente
	// la opci�n de eliminar la tabla anterior y crearla de nuevo
	// vac�a con el nuevo formato.
	// Sin embargo lo normal ser� que haya que migrar datos de la
	// tabla antigua a la nueva, por lo que este m�todo deber�a
	// ser m�s elaborado.
	// Se elimina la versi�n anterior de la tabla
	// db.execSQL("DROP TABLE IF EXISTS historicorepostar");
	// Se crea la nueva versi�n de la tabla
	// db.execSQL(sqlCreate);
	// }
